home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / A-COMAL Series / (k)aan.d64 / src.printer < prev    next >
Text File  |  2007-02-28  |  15KB  |  939 lines

  1. ;PUT "@0:SRC.PRINTER"
  2.  .OPT NOLIST
  3.  .LIB 0:SYMBS
  4.  .OPT NOSYMBS
  5.  .OPT NOGEN
  6. ;***
  7. *=$9000
  8. ;*****************
  9.  .BYTE DEFPAG+ROMMED
  10.  .WORD FILEND ;LAST ENTRY
  11.  .WORD SENSE  ;SENCE ROUTINE
  12. ;*****************
  13.  .BYTE 7,'PRINTER' ;PAK B NAME
  14.  .WORD CMDSB ;PTR TO FIRST COMMAND
  15.  .WORD INITB ;INITIALIZATION RTNND
  16.  .BYTE 16,'PRINTER''COMMANDS' ;PAK A NAME
  17.  .WORD CMDSA ;PTR TO FIRST COMMAND
  18.  .WORD INITA ;INITIALIZATION RTNND
  19.  .BYTE 0 ;END OF PACKAGES
  20. ;****************
  21. SENSE CPY #NEW
  22.  BEQ CLRPAK
  23.  CPY #DSCRD
  24.  BEQ CLRPAK
  25.  CPY #WARM1
  26.  BEQ CLRPAK
  27.  RTS ;END SENSE
  28. CLRPAK LDA #<$F1CA
  29.  STA $0326   ;WRITE ROUTINE
  30.  LDA #>$F1CA
  31.  STA $0326+1
  32.  LDA #0
  33.  STA FLAG
  34.  STA RVSFLG
  35.  RTS
  36. ;*****************
  37. ;INITIALIZATION ROUTINE
  38. INITB LDX #70
  39. MOVWRT LDA NSTUFF-1,X ;PATCH
  40.  STA $033C-1,X ;CASSETTE BUFFER
  41.  DEX
  42.  BNE MOVWRT
  43.  LDA #<$033C
  44.  STA $0326
  45.  LDA #>$033C
  46.  STA $0326+1
  47.  LDA #4
  48.  STA LPSA
  49. INITA RTS
  50. ;*****************
  51. ;PATCHES/UNPATCHES
  52. ;*****************
  53. ;THIS SECTION IS MOVED DOWN
  54. ;TO THE CASSETTE BUFFER FOR
  55. ;EXECUTION
  56. ;*****************
  57. NSTUFF PHA ;STORE CHARACTER
  58.  LDA $9A
  59.  CMP LPFA
  60.  BEQ NSTOK ;NEW STUFF OK
  61.  PLA
  62.  JMP $F1CA
  63. NSTOK SEI ;PROTECT FROM IRQ
  64.  LDA PAGE  ;GET PAGE
  65.  STA $FE
  66.  LDA $1
  67.  STA $FD
  68.  LDA #$37
  69.  STA $1
  70.  LDA #PAGE0
  71.  STA $DE00
  72.  STA PAGE
  73.  PLA
  74.  CLI ;OK TO INTERRUPT
  75.  JSR NEWOUT
  76.  PHA
  77.  SEI
  78.  LDA $FE
  79.  STA $DE00
  80.  STA PAGE
  81.  LDA $FD
  82.  STA $1
  83.  PLA
  84.  CLI
  85.  RTS
  86. ;*****************
  87. ;** NAME/LOOKUP **
  88. ;*****************
  89. CMDSB
  90. ;****
  91.     .BYTE 11,'SCREEN''DUMP'
  92.     .WORD CMDD1
  93. ;
  94.     .BYTE 14,'CBM''CHARACTERS'
  95.     .WORD CMDD2
  96. ;
  97.     .BYTE 8,'HEX''DUMP'
  98.     .WORD CMDD3
  99. ;
  100.     .BYTE 10,'SETPRINTER'
  101.     .WORD CMDD4
  102. ;
  103.     .BYTE 11,'SET''REVERSE'
  104.     .WORD CMDD5
  105. ;
  106.     .BYTE 8,'HARDCOPY'
  107.     .WORD CMDD6
  108. ;
  109.     .BYTE 9,'GETSCREEN'
  110.     .WORD CMDD7
  111. ;
  112.     .BYTE 9,'SETSCREEN'
  113.     .WORD CMDD8
  114. ;
  115.     .BYTE 7,'DENSITY'
  116.     .WORD CMDD11
  117. ;
  118. ;****
  119. .BYTE 0 ;END OF COMMANDS
  120. ;*******************
  121. ;** COMMAND DATA **
  122. ;*******************
  123. CMDD1 .BYTE PROC ;TYPE OF COMMAND
  124.  .WORD PDUMP  ;START ADDRESS TO IT
  125.  .BYTE 1 ;NUMBER OF PARAMETERS
  126.  .BYTE VALUE+INT ;PARM TYPE
  127.  .BYTE ENDPRC ;** END PARMS **
  128. ;****
  129. CMDD2 .BYTE PROC ;TYPE OF COMMAND
  130.  .WORD CONVRT ;START ADDRESS TO IT
  131.  .BYTE 1 ;NUMBER OF PARAMETERS
  132.  .BYTE VALUE+INT ;PARM TYPE
  133.  .BYTE ENDPRC
  134. ;****
  135. CMDD11 .BYTE PROC ;TYPE OF COMMAND
  136.  .WORD SETDNS ;START ADDRESS TO IT
  137.  .BYTE 1 ;NUMBER OF PARAMETERS
  138.  .BYTE VALUE+INT ;PARM TYPE
  139.  .BYTE ENDPRC
  140. ;****
  141. CMDD3 .BYTE PROC
  142.  .WORD HEXDMP
  143.  .BYTE 1
  144.  .BYTE VALUE+INT
  145.  .BYTE ENDPRC
  146. ;****
  147. CMDD4 .BYTE PROC
  148.  .WORD SETP
  149.  .BYTE 1
  150.  .BYTE VALUE+STR
  151.  .BYTE ENDPRC
  152. ;****
  153. CMDD5 .BYTE PROC
  154.  .WORD REVERS
  155.  .BYTE 1
  156.  .BYTE VALUE+INT
  157.  .BYTE ENDPRC
  158. ;****
  159. CMDD6 .BYTE PROC
  160.  .WORD HRDCPY
  161.  .BYTE 1
  162.  .BYTE VALUE+STR
  163.  .BYTE ENDPRC
  164.  ;****
  165. CMDD7 .BYTE PROC
  166.  .WORD GTSCRN
  167.  .BYTE 1
  168.  .BYTE REF+STR
  169.  .BYTE ENDPRC
  170. ;****
  171. CMDD8 .BYTE PROC
  172.  .WORD STSCRN
  173.  .BYTE 1
  174.  .BYTE REF+STR
  175.  .BYTE ENDPRC
  176. ;****
  177.  .BYTE 0;END  OF TABLE
  178. ;****
  179. GETVER LDA TESTRV ;GET REVISION
  180.  CMP #76 ;2.01Y VERS?
  181.  BNE NOTVY
  182.  CLC
  183.  RTS
  184. NOTVY SEC
  185.  RTS
  186. ;******************
  187. HEXDMP LDA #1
  188.  JSR FNDPAR
  189.  LDY #1
  190.  LDA (COPY1),Y
  191.  BEQ CLRHEX
  192.  LDA FLAG
  193.  ORA #%00000010
  194.  STA FLAG
  195.  RTS
  196. CLRHEX LDA FLAG
  197.  AND #%11111101
  198.  STA FLAG
  199.  RTS
  200. ;******************
  201. CONVRT LDA #1  ;FIRSTPARM
  202.  JSR FNDPAR
  203.  LDY #1
  204.  LDA (COPY1),Y
  205.  BEQ CLRCBM
  206.  LDA FLAG
  207.  ORA #%00000001
  208.  STA FLAG
  209.  JSR RESETP
  210.  JSR SETLS
  211.  RTS
  212. CLRCBM LDA FLAG
  213.  AND #%11111110
  214.  STA FLAG
  215.  JSR RESETP
  216.  RTS
  217. ;******************
  218. REVERS LDA #1
  219.  JSR FNDPAR
  220.  LDY #1
  221.  LDA (COPY1),Y
  222.  BEQ CLRRVS
  223.  LDA #$FF
  224.  .BYTE $2C   ;BIT $XXXX
  225. CLRRVS LDA #0
  226.  STA RVSFLG
  227.  RTS
  228. ;*************
  229. SETDNS LDA #1
  230.  JSR FNDPAR
  231.  LDY #1
  232.  LDA (COPY1),Y
  233.  BNE CLRDNS
  234.  LDA #$FF
  235.  .BYTE $2C   ;BIT $XXXX
  236. CLRDNS LDA #0
  237.  STA DENSIT
  238.  RTS
  239. ;*************
  240. PDUMP LDA #1
  241.  JSR FNDPAR
  242.  LDY #1
  243.  LDA (COPY1),Y
  244.  BNE NOTPDA
  245.  JMP PDUMPA
  246. NOTPDA CMP #1
  247.  BNE NOTPDB
  248.  JMP PDUMPB
  249. NOTPDB CMP #2
  250.  BNE NOTPDC
  251.  JMP PDUMPC
  252. NOTPDC CMP #3
  253.  BNE NOTPDD
  254.  JMP PDUMPD
  255. NOTPDD LDX #1 ;ERROR
  256.  JMP RUNERR :REPORT IT
  257. ;*************
  258. SETP JSR GETVER ;GET VERSION
  259.  BCS SETP2
  260.  JSR GOTO
  261.  .BYTE PAGE1
  262.  .WORD $A80B
  263. SETP2 JSR GOTO
  264.  .BYTE PAGE1
  265.  .WORD $AB21
  266. ;*************
  267. ;GETMAP ROUTINE FINDS THE CORRECT
  268. ;SCREEN PORTIONS OF MEMORY AND
  269. ;STORES THEM IN THE WORKSPACE
  270. GETMAP LDA #0
  271.  STA BANK ;CLEAR LOW BYTE
  272.  STA SCRMEM ;CLEAR LOW BYTE
  273.  STA CHRMEM ;CLEAR LOW BYTE
  274.  LDA $DD00 ;GET BANK SELECTION
  275.  AND #%00000011 ;ELIMINATE EXCESS
  276.  TAX ;VALUE TO REGISTER
  277.  LDA TRANGE,X
  278.  STA BANK+1 ;BANK SET TO CURRENT
  279. ;***
  280. ;FIND SCREEN MEMORY
  281. ;***
  282.  LDA VCTR13 ;VIC CONTROL REGISTER
  283.  AND #%11110000 ;SCREEN DATA ONLY
  284.  CLC ;CLEAR CARRY
  285.  ROR A ;DIVIDE  BY 2
  286.  ROR A ;DIVIDE BY 2 AGAIN
  287.  CLC ;CLEAR STATUS REGISTER
  288.  ADC BANK+1 ;ADD BANK TO OFFSET
  289.  STA SCRMEM+1 ;SET SCREEN CURRENT
  290. ;***
  291. ;FIND CHARACTER MEMORY
  292. ;***
  293.  LDA VCTR13 ;VIC CONTROL REGISTER
  294.  AND #%00001110 ;ELIMINATE EXCESS
  295.  CLC
  296.  ASL A ;MULTIPLY BY 2
  297.  ASL A ;MULTIPLY BY 2 AGAIN
  298.  STA CHRMEM+1
  299. ;*
  300. ;CORRECT FOR HARDWARE
  301. ;*
  302.  LDA BANK+1 ;GET GRAPHICS BANK
  303.  CMP #$C0 ;IS IT ACCESSABLE
  304.  BEQ ADJUST ;BY THE CHR ROM ?
  305.  CMP #0 ;ADJUST FOR HARDWARE
  306.  BNE NOTADJ ;IF NOT FIND ADDRESS
  307. ADJUST LDA #$C0 ;HARDWARE CORRECT
  308. NOTADJ CLC ;CLEAR STATUS BIT
  309.  ADC CHRMEM+1
  310.  STA CHRMEM+1
  311. ;***
  312. ;IDENTIFY GRAPHICS MODE
  313. ;***
  314.  LDA VCTR12 ;VIDIO CTRL REGISTER
  315.  AND #%00010000 ;MODE ONLY
  316.  BNE GMOD1 ;MULTI-COLOR MODE
  317.  LDA #0
  318.  .BYTE $2C ;BIT INSTRUCTION
  319. GMOD1 LDA #$80
  320.  STA SCRMOD
  321.  LDA VCTR11 ;BIT-MAP MODE
  322.  ROR A
  323.  AND #%01000000 ;MODE ONLY
  324.  ORA SCRMOD
  325.  STA SCRMOD
  326.  RTS
  327. ;**************
  328. HRDCPY JSR GETVER ;GET VERSION
  329.  BCS HRDCP2
  330.  JSR GOTO
  331.  .BYTE PAGE1
  332.  .WORD $A96A
  333. HRDCP2 JSR GOTO
  334.  .BYTE PAGE1
  335.  .WORD $A971
  336. ;*************
  337. GTSCRN JSR GETVER ;GET VERSION
  338.  BCS GTSCR2
  339.  JSR GOTO
  340.  .BYTE PAGE1
  341.  .WORD $A878
  342. GTSCR2 JSR GOTO
  343.  .BYTE PAGE1
  344.  .WORD $A87F
  345. ;*************
  346. STSCRN JSR GETVER ;GET VERSION
  347.  BCS STSCR2
  348.  JSR GOTO
  349.  .BYTE PAGE1
  350.  .WORD $A87B
  351. STSCR2 JSR GOTO
  352.  .BYTE PAGE1
  353.  .WORD $A882
  354. ;*************
  355. ;*****************
  356. CMDSA
  357. ;****
  358.    .BYTE 4,'BEEP'
  359.    .WORD CMDA1
  360.    .BYTE 9,'BACKSPACE'
  361.    .WORD CMDA2
  362.    .BYTE 7,'ENLARGE'
  363.    .WORD CMDA3
  364.    .BYTE 9,'UNENLARGE'
  365.    .WORD CMDA4
  366.    .BYTE 8,'CONDENSE'
  367.    .WORD CMDA5
  368.    .BYTE 10,'UNCONDENSE'
  369.    .WORD CMDA6
  370.    .BYTE 9,'UNDERLINE'
  371.    .WORD CMDA7
  372.    .BYTE 13,'UNDERLINE''OFF'
  373.    .WORD CMDA8
  374.    .BYTE 9,'EMPHASIZE'
  375.    .WORD CMDA9
  376.    .BYTE 11,'UNEMPHASIZE'
  377.    .WORD CMDA10
  378.    .BYTE 4,'BOLD'
  379.    .WORD CMDA11
  380.    .BYTE 6,'UNBOLD'
  381.    .WORD CMDA12
  382.    .BYTE 5,'ELITE'
  383.    .WORD CMDA13
  384.    .BYTE 4,'PICA'
  385.    .WORD CMDA14
  386.    .BYTE 11,'SUPERSCRIPT'
  387.    .WORD CMDA15
  388.    .BYTE 9,'ENDSCRIPT'
  389.    .WORD CMDA16
  390.    .BYTE 9,'SUBSCRIPT'
  391.    .WORD CMDA17
  392.    .BYTE 7,'REVERSE'
  393.    .WORD CMDA18
  394.    .BYTE 11,'REVERSE''OFF'
  395.    .WORD CMDA19
  396.    .BYTE 7,'ITALICS'
  397.    .WORD CMDA20
  398.    .BYTE 11,'ITALICS''OFF'
  399.    .WORD CMDA21
  400.    .BYTE 11,'SPACING''1''6'
  401.    .WORD CMDA22
  402.    .BYTE 11,'SPACING''1''8'
  403.    .WORD CMDA23
  404.    .BYTE 8,'FORMFEED'
  405.    .WORD CMDA24
  406.    .BYTE 13,'RESET''PRINTER'
  407.    .WORD CMDA25
  408. ;**********
  409.    .BYTE 0
  410. ;**********
  411. CMDA1  .BYTE PROC,<AINS1,>AINS1,0,ENDPRC
  412. CMDA2  .BYTE PROC,<AINS2,>AINS2,0,ENDPRC
  413. CMDA3  .BYTE PROC,<AINS3,>AINS3,0,ENDPRC
  414. CMDA4  .BYTE PROC,<AINS4,>AINS4,0,ENDPRC
  415. CMDA5  .BYTE PROC,<AINS5,>AINS5,0,ENDPRC
  416. CMDA6  .BYTE PROC,<AINS6,>AINS6,0,ENDPRC
  417. CMDA7  .BYTE PROC,<AINS7,>AINS7,0,ENDPRC
  418. CMDA8  .BYTE PROC,<AINS8,>AINS8,0,ENDPRC
  419. CMDA9  .BYTE PROC,<AINS9,>AINS9,0,ENDPRC
  420. CMDA10 .BYTE PROC,<AINS10,>AINS10,0,ENDPRC
  421. CMDA11 .BYTE PROC,<AINS11,>AINS11,0,ENDPRC
  422. CMDA12 .BYTE PROC,<AINS12,>AINS12,0,ENDPRC
  423. CMDA13 .BYTE PROC,<AINS13,>AINS13,0,ENDPRC
  424. CMDA14 .BYTE PROC,<AINS14,>AINS14,0,ENDPRC
  425. CMDA15 .BYTE PROC,<AINS15,>AINS15,0,ENDPRC
  426. CMDA16 .BYTE PROC,<AINS16,>AINS16,0,ENDPRC
  427. CMDA17 .BYTE PROC,<AINS17,>AINS17,0,ENDPRC
  428. CMDA18 .BYTE PROC,<AINS18,>AINS18,0,ENDPRC
  429. CMDA19 .BYTE PROC,<AINS19,>AINS19,0,ENDPRC
  430. CMDA20 .BYTE PROC,<AINS20,>AINS20,0,ENDPRC
  431. CMDA21 .BYTE PROC,<AINS21,>AINS21,0,ENDPRC
  432. CMDA22 .BYTE PROC,<AINS22,>AINS22,0,ENDPRC
  433. CMDA23 .BYTE PROC,<AINS23,>AINS23,0,ENDPRC
  434. CMDA24 .BYTE PROC,<AINS24,>AINS24,0,ENDPRC
  435. CMDA25 .BYTE PROC,<AINS25,>AINS25,0,ENDPRC
  436. ;**********
  437.  .MAC PTR
  438.  LDA #<?1
  439.  LDY #>?1
  440.  JMP PTRCOT ;PRINTER CMD OUT
  441.  .MND
  442. ;**********
  443. PTRCOT STA FREKZP
  444.  STY FREKZP+1
  445.  LDA #133
  446.  LDX #4
  447.  LDY #0
  448.  JSR SETLFS
  449.  LDA #0
  450.  JSR SETNAM
  451.  LDA #133
  452.  JSR OPEN
  453.  LDX #133
  454.  JSR CHKOUT
  455.  LDY #0
  456.  LDA (FREKZP),Y
  457.  STA FREKZP+2
  458. PTRC0T CPY FREKZP+2
  459.  BEQ PTREND
  460.  INY
  461.  LDA (FREKZP),Y
  462.  JSR CHROUT
  463.  JMP PTRC0T
  464. PTREND JSR CLRCHN
  465.  LDA #133
  466.  JSR CLOSE
  467.  RTS
  468. ;***************
  469. AINS1  PTR DAT1
  470. AINS2  PTR DAT2
  471. AINS3  PTR DAT3
  472. AINS4  PTR DAT4
  473. AINS5  PTR DAT5
  474. AINS6  PTR DAT6
  475. AINS7  PTR DAT7
  476. AINS8  PTR DAT8
  477. AINS9  PTR DAT9
  478. AINS10 PTR DAT10
  479. AINS11 PTR DAT11
  480. AINS12 PTR DAT12
  481. AINS13 PTR DAT13
  482. AINS14 PTR DAT14
  483. AINS15 PTR DAT15
  484. AINS16 PTR DAT16
  485. AINS17 PTR DAT17
  486. AINS18 PTR DAT18
  487. AINS19 PTR DAT19
  488. AINS20 PTR DAT20
  489. AINS21 PTR DAT21
  490. AINS22 PTR DAT22
  491. AINS23 PTR DAT23
  492. AINS24 PTR DAT24
  493. AINS25 PTR DAT25
  494. ;***************
  495. ;**********************
  496. NEWOUT STA CHRTMP ;STORE CHAR
  497.  LDA FLAG ;PACK IN USE
  498.  BNE TOPRNT ;PACK IN USE
  499.  LDA CHRTMP ;RECOVER CHAR
  500.  JMP CIOUT  ;GO NORMAL
  501. ;**********************
  502. TOPRNT STX XTEMP
  503.  STY YTEMP
  504.  JSR T0PRNT
  505.  LDX #$FF
  506. DECX DEX
  507.  BNE DECX
  508.  STX $90 ;CLEAR STATUS
  509.  LDX XTEMP
  510.  LDY YTEMP
  511.  CLC
  512.  CLV
  513.  RTS
  514. T0PRNT LDA FLAG ;HOW NOW?
  515.  AND #%00000010 ;CHECK HEX
  516.  CMP #%00000010 ;OUTPUT
  517.  BNE PAKOU1 ;NOPE NOT HEX
  518.  LDA CHRTMP ;GET CHARACTER
  519.  CMP #$0D ;CR
  520.  BEQ SNDCR
  521.  PHA ;MAKE A COPY
  522.  PHA ;MAKE A COPY
  523.  LDA #'$'
  524.  JSR PAKOUT
  525.  PLA
  526.  LSR A
  527.  LSR A
  528.  LSR A
  529.  LSR A
  530.  JSR OUTIT ;SEND NIBBLE
  531.  PLA
  532.  AND #$0F
  533.  JSR OUTIT
  534.  LDA #' '
  535. SNDCR JSR PAKOUT
  536.  RTS
  537. ;**********************
  538. OUTIT CMP #$0A
  539.  BCC NUMB
  540.  CLC
  541.  ADC #$07
  542. NUMB ADC #$30
  543.  JSR PAKOUT
  544.  RTS
  545. ;**********************
  546. PAKOU1 LDA CHRTMP
  547. PAKOUT PHA
  548.  LDA FLAG
  549.  AND #%00000001
  550.  CMP #%00000001
  551.  BEQ CBMOUT ;TO CBM CHCTRS
  552.  PLA
  553.  JMP CIOUT ;SEND AND RETURN
  554. ;**********************
  555. CBMOUT JSR GETMAP
  556.  JSR FILPAT
  557.  PLA
  558.  STA CHRTMP
  559.  CMP #$0D ;A CR?
  560.  BNE NOTCRL ;SEND GRAPHIC CHR
  561.  LDA #0 ;CLEAR MODES
  562.  STA QUOTEM ;CLEAR QUOTE
  563.  STA RVSM   ;REVERSE MODE
  564.  LDA #$0D ;GET A CR
  565.  JMP CIOUT ;TERMINATE AND RTN
  566. NOTCRL CMP  #'"'
  567.  BNE NOTQUO ;NOT QUOTE
  568.  LDA QUOTEM
  569.  BNE CLRQUO ;CLEAR QUOTE MODE
  570.  LDA #$80
  571.  .BYTE $2C ;BIT INST
  572. CLRQUO LDA #$00
  573.  STA QUOTEM
  574.  JMP SGC
  575. NOTQUO CMP #$12 ;REVERSE ON?
  576.  BNE NOTR ;NOT REVERSE ON
  577.  BIT QUOTEM ;CHECK FOR QUOTE MODE
  578.  BMI NOTR ;YES SEND CHR
  579.  LDA #$80 ;NO SET RVS TRUE
  580.  STA RVSM ;STORE FLAG
  581.  RTS  ;EXIT SUBROUTINE
  582. NOTR CMP #$92 ;RVS OFF
  583.  BNE NOTRO ;NOT REVERSE OFF
  584.  BIT QUOTEM ;CHECK FOR QUOTE MODE
  585.  BMI NOTRO ;YES SEND CHR
  586.  LDA #$00 ;NO SET RVS FALSE
  587.  STA RVSM ;STORE FLAG
  588.  RTS ;EXIT SUBROUTINE
  589. NOTRO CMP #$14 ;CBM DELETE
  590.  BNE CHKPAG
  591.  BIT QUOTEM ;CHECK FOR QUOTE MODE
  592.  BMI CHKPAG ;YES SEND CHR
  593.  LDA #$08 ;ASCII DELETE
  594.  JMP CIOUT ;SEND TO PRINTER
  595.  ;EXIT SUBROUTINE
  596. CHKPAG CMP #$93 ;CLEAR/HOME
  597.  BEQ CHKPA2
  598.  CMP #12 ;LINE FEED
  599.  BNE CHKCTL
  600. CHKPA2 BIT QUOTEM ;CHK QUOTE MODE
  601.  BMI CHKCTL ;YES SEND CHR
  602.  LDA #12 ;ASCII TOF
  603.  JMP CIOUT ;SEND TO PRINTER
  604.  ;EXIT SUBROUTINE
  605. CHKCTL CMP #$20 ;IS IT A CONTROL
  606.  BCS SGC ;NOT CTRL
  607.  LDA CHRTMP ;RECOVER CHARACTER
  608.  ORA #%11000000 ;SET MSB/RVS
  609.  STA CHRTMP ;RESAVE IT
  610. SGC JSR SNDGRF ;SEND GRAPHIC IMAGE
  611.  LDA #$80
  612.  TAX
  613. LOOPXY DEX
  614.  BNE LOOPXY
  615.  RTS
  616. ;**********************
  617. ;FILL PATTERN WITH GRAPHIC
  618. FILPAT LDA #0
  619.  STA SLFMOD
  620.  STA SLFMOD+1
  621.  LDA CHRTMP
  622.  CMP #$20
  623.  BCC CTRCHR
  624.  AND #$3F ;TO SCREEN CODE
  625.  BIT CHRTMP
  626.  BPL CTRCHR
  627.  ORA #%01000000
  628. CTRCHR STA SLFMOD
  629.  LDX #3
  630. ROLLAD CLC
  631.  ROL SLFMOD
  632.  ROL SLFMOD+1
  633.  DEX
  634.  BNE ROLLAD
  635.  LDA CHRMEM+1
  636.  CLC
  637.  ADC SLFMOD+1
  638.  STA SLFMOD+1
  639.  SEI ;LOCK OUT INTERRUPTS
  640.  LDA $1 ;6510 REGISTER
  641.  PHA
  642.  LDX CHRMEM+1
  643.  CPX #$D0
  644.  BEQ ROMCHS
  645.  CPX #$D8
  646.  BEQ ROMCHS
  647.  AND #$FC
  648.  BNE RAMCHS
  649. ROMCHS AND #$FB
  650. RAMCHS STA $1
  651.  LDY #$07 ;NUMBER OF BYTES
  652. LOOP01 LDA $FFFF,Y
  653. SLFMOD = *-2
  654.  STA PRTPAT,Y
  655.  DEY
  656.  BPL LOOP01
  657.  PLA
  658.  STA $1
  659.  CLI
  660.  LDY #7
  661. LOOP02 LDX #0
  662. LOOP03 ROL PRTPAT,X
  663.  ROL A
  664.  INX
  665.  CPX #8
  666.  BNE LOOP03
  667.  PHA
  668.  DEY
  669.  BPL LOOP02
  670.  LDY #7
  671. LOOP04 PLA ;RECALL SAVED IMAGE
  672.  BIT RVSM ;CHECK REVERSE MODE
  673.  BPL DONTRV ;DONT REVERSE IT
  674.  EOR #$FF
  675. DONTRV STA PRTPAT,Y
  676.  DEY
  677.  BPL LOOP04
  678.  RTS
  679. ;**************
  680. ;*********************
  681. ;* SYSTEM VARIABLES  *
  682. ;*********************
  683. SCNKEY = $FF9F
  684. GETIN  = $FFE4
  685. ;VIC IS $D000
  686. VCTR11 = $D011
  687. VCTR12 = $D016
  688. VCTR13 = $D018
  689. ;*********************
  690. ;*ZERO PAGE LOCATIONS*
  691. ;*********************
  692. BITMAP = $8B
  693. BUFR   = $8D
  694. ;
  695. ;*********************
  696. ;*  PACKAGE STORAGE  *
  697. ;*********************
  698. PRTPAT .BYTE '                '
  699. STOR4  .BYTE 0,0,0,0,0
  700. ROW    .BYTE 0
  701. COL    .BYTE 0
  702. ADDR1  .BYTE 0
  703. ADDR2  .BYTE 0
  704. FLAG01 .BYTE 0
  705. TEMP1  .BYTE 0
  706. BANK   .WORD 0
  707. SCRMEM .WORD 0
  708. CHRMEM .WORD 0
  709. SCRMOD .BYTE 0
  710. QUOTEM .BYTE 0
  711. RVSM   .BYTE 0
  712. FLAG   .BYTE 0
  713. RVSFLG .BYTE 0
  714. DENSIT .BYTE 0
  715. CHRTMP .BYTE 0
  716. XTEMP  .BYTE 0
  717. YTEMP  .BYTE 0
  718. INTMP1 .BYTE 0
  719. INTMP2 .BYTE 0
  720. INTMP3 .BYTE 0
  721. TRANGE .BYTE $C0,$80,$40,0
  722. BUFRA  *=*+320
  723. BUFRB  *=*+320
  724. ;*********************
  725. ;* PACKAGE CONSTANTS *
  726. ;*********************
  727. ;*************************
  728. CTRTB2 .BYTE 3,$20,76,27
  729. ;*************************
  730. RVSTAB .BYTE $FF,$FC,$F3,$F0
  731.  .BYTE $CF,$CC,$C3,$C0
  732.  .BYTE $3F,$3C,$33,$30
  733.  .BYTE $0F,$0C,$03,$00
  734. ;*************************
  735. NORTAB .BYTE $00,$03,$0C,$0F
  736.  .BYTE $30,$33,$3C,$3F
  737.  .BYTE $C0,$C3,$CC,$CF
  738.  .BYTE $F0,$F3,$FC,$FF
  739. ;*************************
  740. ;THIS FILE  SHOULD CONTAIN
  741. ;TWO ENTRY POINTS FOR A SMALL
  742. ;DUMP TO THE PRINTER.
  743. ;ENTRY POINTS ARE:
  744. ;PDUMPA
  745. ;PDUMPB
  746. ;PDUMPA SHOULD BE A VERTICAL DUMP
  747. ;PDUMPB SHOULD BE HORIZONTAL
  748. ;
  749. ;*******************
  750. PDUMPA LDA FLAG ;PROTECT OUTPUT
  751.  PHA
  752.  LDA #0
  753.  STA FLAG
  754.  JSR RESETP
  755.  JSR SETLS
  756.  LDA #$00
  757.  STA BITMAP
  758.  STA ADDR1
  759.  STA ROW
  760.  LDA #$E0
  761.  STA BITMAP+1
  762.  STA ADDR2
  763. NEWROW LDA #<BUFRA
  764.  STA BUFR
  765.  LDA #>BUFRA
  766.  STA BUFR+1
  767.  LDA #$00
  768.  STA COL
  769.  SEI
  770.  LDA $01
  771.  STA TEMP1
  772.  LDA #$00
  773.  STA $01
  774. LOADBF LDY #$07
  775. VICRXW LDA (BITMAP),Y
  776.  LDX #$00
  777. PPXCOL ASL A
  778.  ROR PRTPAT,X
  779.  INX
  780.  CPX #$08
  781.  BNE PPXCOL
  782.  DEY
  783.  BPL VICRXW
  784.  LDY #$00
  785. MOVEPN LDA PRTPAT,Y
  786.  BIT RVSFLG
  787.  BPL NONRE
  788.  .BYTE $2C ;BIT $XXXX
  789. NONRE EOR #$FF ;REVERSE IT
  790.  STA (BUFR),Y
  791.  INY
  792.  CPY #$08
  793.  BNE MOVEPN
  794.  CLC
  795.  LDA BUFR
  796.  ADC #$08
  797.  STA BUFR
  798.  LDA BUFR+1
  799.  ADC #$00
  800.  STA BUFR+1
  801.  CLC
  802.  LDA BITMAP
  803.  ADC #$08
  804.  STA BITMAP
  805.  LDA BITMAP+1
  806.  ADC #$00
  807.  STA BITMAP+1
  808.  INC COL
  809.  LDA COL
  810.  CMP #$28
  811.  BNE LOADBF
  812.  LDA TEMP1
  813.  STA $1
  814.  CLI
  815.  LDX #$00 ;HALFSIES
  816. MODLM LDA BUFRA,X
  817.  PHA
  818.  AND #%11110000
  819.  LSR A
  820.  LSR A
  821.  LSR A
  822.  LSR A
  823.  TAY
  824.  LDA NORTAB,Y
  825.  STA BUFRA,X
  826.  PLA
  827.  AND #%00001111
  828.  TAY
  829.  LDA NORTAB,Y
  830.  STA BUFRB,X
  831.  LDA BUFRA+$A0,X
  832.  PHA
  833.  AND #%11110000
  834.  LSR A
  835.  LSR A
  836.  LSR A
  837.  LSR A
  838.  TAY
  839.  LDA NORTAB,Y
  840.  STA BUFRA+$A0,X
  841.  PLA
  842.  AND #%00001111
  843.  TAY
  844.  LDA NORTAB,Y
  845.  STA BUFRB+$A0,X
  846.  INX
  847.  CPX #$A0
  848.  BNE MODLM
  849.  JSR UNLSN
  850.  JSR SNDBFA
  851.  JSR SNDBFB
  852.  INC ROW
  853.  LDA ROW
  854.  CMP #$19
  855.  BEQ QUIT2
  856.  CLC
  857.  LDA ADDR1
  858.  ADC #$40
  859.  STA ADDR1
  860.  STA BITMAP
  861.  LDA ADDR2
  862.  ADC #$01
  863.  STA ADDR2
  864.  STA BITMAP+1
  865.  JMP NEWROW
  866. QUIT2 JSR RESETP
  867.  PLA
  868.  STA FLAG
  869.  RTS
  870. ;******************
  871. PDUMPB JSR RESETP
  872.  JSR SETLS
  873.  LDA #0
  874.  LDX #$A0
  875. CLRLUP STA BUFRA,X
  876.  STA BUFRA+$A0,X
  877.  DEX
  878.  BNE CLRLUP
  879.  LDA #$28
  880.  STA COL
  881.  LDA #$07
  882.  STA FREKZP
  883.  LDA #$FE
  884.  STA FREKZP+1
  885. NROWXT JSR GPATUR
  886.  JSR SNDBFA
  887.  DEC COL
  888.  BNE NROWXT
  889.  JSR RESETP
  890.  RTS
  891. GPATUR SEI
  892.  LDA 1
  893.  PHA
  894.  LDA #$35
  895.  STA 1
  896.  LDX #0
  897.  LDA #$19
  898.  STA ROW
  899. GPNXR LDA #$08
  900.  STA TEMP1
  901.  LDY #0
  902. XPATRE LDA (FREKZP),Y
  903.   BIT RVSFLG
  904.   BPL NONRE2
  905.  .BYTE $2C ;BIT $XXXX
  906. NONRE2 EOR #$FF
  907.  STA BUFRA,X
  908.  INX
  909.  LDA FREKZP
  910.  BNE OVRHIX
  911.  DEC FREKZP+1
  912. OVRHIX DEC FREKZP
  913.  DEC TEMP1
  914.  BNE XPATRE
  915.  LDA FREKZP
  916.  SEC
  917.  SBC #$38
  918.  STA FREKZP
  919.  LDA FREKZP+1
  920.  SBC #1
  921.  STA FREKZP+1
  922.  DEC ROW
  923.  BNE GPNXR
  924.  LDA FREKZP
  925.  CLC
  926.  ADC #$48
  927.  STA FREKZP
  928.  LDA FREKZP+1
  929.  ADC #$1F
  930.  STA FREKZP+1
  931.  PLA
  932.  STA 1
  933.  CLI
  934.  RTS
  935. ;*******************
  936.  .LIB SRC.GEMINI
  937.  .LIB SRC.CUSTOMDUMP
  938. FILEND .END
  939.